home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 51
/
Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso
/
-serious-
/
programming
/
e
/
powerd
/
source
/
examples
/
showtarga.d
< prev
next >
Wrap
Text File
|
2000-01-27
|
2KB
|
87 lines
// This small program shows 24bit only targa files (generated by RayTrace.d)
// It distinguishes if you have AGA or not and shows the image in 16 or 256 grey scale
MODULE 'dos/dos','exec/memory','intuition/intuition','intuition/screens','graphics/modeid'
ENUM TARGAFILE
PROC main()
DEF args:PTR TO LONG,ra
args:=[NIL]:LONG
IF ra:=ReadArgs('TARGAFILE/A',args,NIL)
ShowTarga(args[TARGAFILE])
FreeArgs(ra)
ELSE DO PrintFault(IOErr(),'showtarga')
ENDPROC
OBJECT BGR
b:UBYTE,
g:UBYTE,
r:UBYTE
PROC ShowTarga(name:PTR TO CHAR)
DEF f,head[18]:UBYTE,w,h,mem:PTR TO BGR,m:PTR TO BGR,
screen:PTR TO Screen,window:PTR TO Window,n,vp,d
IF f:=Open(name,MODE_OLDFILE)
Read(f,head,18)
w:=head[12]|head[13]<<8
h:=head[14]|head[15]<<8
Seek(f,head[0],OFFSET_CURRENT)
IF mem:=AllocMem(w*h*3,MEMF_PUBLIC)
m:=mem
Read(f,m,w*h*3)
IF CheckAGA() THEN d:=8 ELSE d:=4
IF screen:=OpenScreenTags(NIL,
SA_Width,w,
SA_Height,h,
SA_Depth,d,
SA_Title,'ShowTarga v0.1 by MarK, 1999',
// SA_DisplayID,VGALORESDBL_KEY,
TAG_END)
IF window:=OpenWindowTags(NIL,
WA_Width,w,
WA_Height,h,
WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_MOUSEBUTTONS,
WA_Flags,WFLG_BORDERLESS|WFLG_ACTIVATE|WFLG_RMBTRAP,
WA_CustomScreen,screen,
TAG_END)
vp:=ViewPortAddress(window)
IF CheckAGA()
FOR n:=0 TO 255 DO SetRGB32(vp,n,n<<24,n<<24,n<<24)
ELSE
FOR n:=0 TO 15 DO SetRGB4(vp,n,n,n,n)
ENDIF
DEF x,y
FOR y:=0 TO h-1
FOR x:=0 TO w-1
n:=m.r+m.g+m.b
IF CheckAGA()
SetAPen(window.RPort,n/3)
ELSE
SetAPen(window.RPort,n/48)
ENDIF
WritePixel(window.RPort,x,y)
m[]++
ENDFOR
ENDFOR
WaitPort(window.UserPort)
CloseWindow(window)
ELSE DO PrintF('Unable to open window!\n')
CloseScreen(screen)
ELSE DO PrintF('Unable to open screen!\n')
FreeMem(mem,w*h*3)
ENDIF
Close(f)
ELSE DO PrintFault(IOErr(),'showtarga')
ENDPROC
APROC CheckAGA()(BOOL)
move.w $dff07c,d0
cmpi.b #$f8,d0
beq.s .yes
moveq #0,d0
rts
.yes
moveq #-1,d0
ENDPROC